import axios from 'axios'
import nprogress from 'nprogress'
import { getTempId } from './auth'
import { clearToken, getToken } from './token'
import { Message } from 'element-ui'
import 'nprogress/nprogress.css'
import store from '@/store'
import router from '@/router'
const instance = axios.create({
  baseURL: '/sph',
  timeout: 5000
})
// 添加请求拦截器
instance.interceptors.request.use(function (config) {
  nprogress.start()
  // 只有当有token的时候在请求头才会携带token所以需要进行判断一下
  const isToken = getToken()
  if (isToken) {
    // 拿到token
    config.headers.token = isToken
  }
  // 因为想要没登录的时候就可以将商品添加到购物车，所以可以给每个用户添加一个私有的id，这个时候就知道是谁添加的商品了
  config.headers.userTempId = getTempId()
  return config
}, function (error) {
  return Promise.reject(error)
})

// 添加响应拦截器
instance.interceptors.response.use(function (response) {
  nprogress.done()
  // 如果token失效，就不会返回数据，会跳转到登录页面且清除vuex和本地token
  // 当状态码是208的时候就是token失效
  if (response.data.code === 208) {
    // 清除本地token
    clearToken()
    // 清除vuex中的数据
    store.commit('user/addUserInfo', {})
    Message.warning('身份过期，请重新登录')
    // 跳转到登录页面
    router.push('/login')
    return new Promise(() => { })
  } else {
    // token未失效
    return response.data
  }
}, function (error) {
  // 会走这个错误的两种情况：
  // 1.请求超时
  // 2.请求路径错误
  // 扔出错误，在请求数据那一块可以捕获错误
  // 111.扔出错误
  return Promise.reject(error)
  // 222.空的promise，就不会继续执行
  // return new Promise(() => {})
})
export default instance
